﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using Autocentro.BussinesLogic;
using Autocentro.Entities;


namespace Autocentro.UI
{
    public partial class FrmMttoCliente : Form
    {
        [Dependency]
        public IClienteBL ClienteBL { get; set; }
        bool IsNew = true;
        public FrmMttoCliente()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void FrmMttoCliente_Load(object sender, EventArgs e)
        {

        }

        public void AddClienteVenta (string dni)
        {
            cLIENTEBindingSource.AddNew();

            var _cli = cLIENTEBindingSource.Current as CLIENTE;
            _cli.Ruc_DNI= dni.ToString();
            cLIENTEBindingSource.ResetBindings(true);
        }

        public void AddCliente()
        {            
            IsNew = true;
            cLIENTEBindingSource.AddNew();
            DeshabilitarCampos();
            
        }
        private void DeshabilitarCampos()
        {
            direccionTextBox.ReadOnly = true;
            razonSocial_NombreTextBox.ReadOnly = true;
            telefonoTextBox.ReadOnly = true;
        }

        private void HabilitarCampos()
        {
            razonSocial_NombreTextBox.ReadOnly = false;
            direccionTextBox.ReadOnly = false;
            telefonoTextBox.ReadOnly = false;
        }

        public CLIENTE cliente { get; set; }

        public void UpdateCliente()
        {
            IsNew = false;
            cLIENTEBindingSource.DataSource = cliente;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var cliente = cLIENTEBindingSource.Current as CLIENTE;
            var msg = "ERROR";
            
            if (cliente!=null)
            {
                cliente.Ruc_DNI = ruc_DNITextBox.Text.ToUpper();
                cliente.RazonSocial_Nombre = razonSocial_NombreTextBox.Text.ToUpper();
                cliente.Direccion = direccionTextBox.Text.ToUpper();
                cliente.Telefono = telefonoTextBox.Text.ToUpper();

                if (IsNew)
                {
                    try
                    {
                        ClienteBL.AddCliente(cliente);
                        MessageBox.Show("Registro Correcto", "Mensaje",  MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje",  MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    try
                    {
                        ClienteBL.UpdateCliente(cliente);
                        UpdateCliente();
                        MessageBox.Show("Modificación Correcta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            CargaCliente();
            razonSocial_NombreTextBox.Focus();
        }

        private void ruc_DNITextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                CargaCliente();
            }
        }

        private void ruc_DNITextBox_Leave(object sender, EventArgs e)
        {
            CargaCliente();
        }

        private void CargaCliente()
        {
            if (ruc_DNITextBox.Text.Length > 0)
            {
                if (IsNew)
                {
                    if (ruc_DNITextBox.Text.Length == 11 || ruc_DNITextBox.Text.Length == 8)
                    {
                        var cliente = ClienteBL.GetFromClienteByRucDni(ruc_DNITextBox.Text);

                        if (cliente != null)
                        {
                            cLIENTEBindingSource.DataSource = cliente;
                            MessageBox.Show("RUC/DNI no disponible:\n" + cliente.RazonSocial_Nombre + "\n" + cliente.Ruc_DNI, "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("RUC/DNI disponible: ", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            HabilitarCampos();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Longitud de RUC/DNI incorrecta", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }
                else
                {
                    var cliente = cLIENTEBindingSource.Current as CLIENTE;
                    var existe = ClienteBL.ValidadDuplicidad(cliente.Ruc_DNI, cliente.RazonSocial_Nombre, cliente.Id);
                    if (existe)
                    {
                        MessageBox.Show(this, "Ya existe un Cliente con el mismo RUC-DNI", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show(this, "RUC/DNI disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else
            {
                MessageBox.Show(this, "Ingrese el número de RUC/DNI", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                ruc_DNITextBox.Focus();
            }
        }

        private void ruc_DNITextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                //CargaCliente();
            }
        }

        private void LimpiarCampos()
        {
            razonSocial_NombreTextBox.Text = "";
            direccionTextBox.Text = ""; ;
            telefonoTextBox.Text = "";
        }

        private void ruc_DNITextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void razonSocial_NombreTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var amberson = Convert.ToString("&");
            var par1 = Convert.ToString("(");
            var par2 = Convert.ToString(")");
            var punto = Convert.ToString(".");
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");


            string cadena = amberson +  par1 + par2 + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void telefonoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var numeral = Convert.ToString("#");
            var guion = Convert.ToString("-");
            var asterisc = Convert.ToString("*");

            string cadena = numeral + guion + asterisc + (char)8;

            if ((Char.IsNumber(e.KeyChar)) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void direccionTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var numeral = Convert.ToString("#");
            var punto = Convert.ToString(".");
            var coma = Convert.ToString(",");
            var guion = Convert.ToString("-");

            string cadena = numeral + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || char.IsNumber(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

    }
}
